package lc.Q200_250;

/**
 * 给你一个整数 n，请你判断该整数是否是 2 的幂次方。如果是，返回 true ；否则，返回 false 。
 *
 * 如果存在一个整数 x 使得 n == 2x ，则认为 n 是 2 的幂次方。
 */
public class Q231 {

    public static void main(String[] args) {
        Q231 q231 = new Q231();
        System.out.println(q231.isPowerOfTwo(16));
        System.out.println(q231.isPowerOfTwo(3));
    }

    public boolean isPowerOfTwo2(int n) {
        return n > 0 && (n & (n - 1)) == 0;
    }

    public boolean isPowerOfTwo(int n) {
        // 可以考虑二进制运算，如果n是2的幂指数，那么n最高位1后面都是0，减1后则，最高位0，后面都是1
        if (n <= 0) {
            return false;
        }
        while (n % 2 == 0) {
            n /= 2;
        }
        return n == 1;
    }
}
